查看原文
其他

数据处理基础—什么是整齐数据和Rich Data

温柔的坚果绷带 单细胞天地 2022-06-06

书籍翻译




的书籍是人类进步的阶梯,但有些人却找不到优秀的阶梯,为此我们开设了书籍翻译这个栏目,作为你学习之路的指路明灯;分享国内外优秀书籍,弘扬分享精神,做一个知识的传播者。


希望大家能有所收获!


书籍翻译历史目录

引言—关于课程

scRNA-seq简介

scRNA-seq原始数据的质控

scRNA-seq数据处理—文件格式小结

scRNA-seq数据处理—demultiplexing

scRNA-seq数据的处理—STAR

scRNA-seq数据处理—Kallisto

scRNA-seq表达矩阵的构建

数据处理必备—R安装

数据处理基础—数据类型了解一下




R/Bioconductor简介

5.3

数据类型


5.6.1 什么是整齐的数据?

整齐的数据是Hadley Wickham (Wickham 2014)主要定义的概念。整齐的数据具有以下三个特征:

  1. 每个变量都有自己的列。

  2. 每个观察值都有自己的行。

  3. 每个值都有自己的单元格。

以下是一些整齐数据的示例:

## Students Subject Years Score
## 1 Mark Maths 1 5
## 2 Jane Biology 2 6
## 3 Mohammed Physics 3 4
## 4 Tom Maths 2 7
## 5 Celia Computing 3 9

以下是一些不整齐数据的示例:

## Students Sport Category Counts
## 1 Matt Tennis Wins 0
## 2 Matt Tennis Losses 1
## 3 Ellie Rugby Wins 3
## 4 Ellie Rugby Losses 2
## 5 Tim Football Wins 1
## 6 Tim Football Losses 4
## 7 Louise Swimming Wins 2
## 8 Louise Swimming Losses 2
## 9 Kelly Running Wins 5
## 10 Kelly Running Losses 1

任务1:不整齐的数据在哪些方面不整洁?我们怎么能把不整齐的数据整理整齐?

整齐的数据通常比不整齐的数据更容易使用,特别是如果您正在使用ggplot等软件包。幸运的是,可以使用软件包来整理不整齐的数据。今天我们将探讨tidyr包中可用的一些功能,这些功能可用于使不整齐的数据变得整齐。如果您有兴趣了解有关整理数据的更多信息,我们建议您阅读Garrett Grolemund和Hadley Wickham撰写的“R for Data Science”。电子版可在此处获取:http://r4ds.had.co.nz/

上面的不整齐数据是不整齐的,因为两个变量(WinsLosses)存储在一列(Category)中。这是数据不整齐的常见方式。为了整理这些数据,我们需要制作WinsLosses插入列,并将值存储Counts在这些列中。幸运的是,tidyverse包中有一个函数来执行此操作。该函数叫spread,它需要两个参数,keyvalue。您应该将包含多个变量的列的名称传递给key,并将包含多个变量值的列的名称传递给value。例如:

library(tidyverse)
sports<-data.frame(Students=c("Matt", "Matt", "Ellie", "Ellie", "Tim", "Tim", "Louise", "Louise", "Kelly", "Kelly"), Sport=c("Tennis","Tennis", "Rugby", "Rugby","Football", "Football","Swimming","Swimming", "Running", "Running"), Category=c("Wins", "Losses", "Wins", "Losses", "Wins", "Losses", "Wins", "Losses", "Wins", "Losses"), Counts=c(0,1,3,2,1,4,2,2,5,1))
sports
## Students Sport Category Counts
## 1 Matt Tennis Wins 0
## 2 Matt Tennis Losses 1
## 3 Ellie Rugby Wins 3
## 4 Ellie Rugby Losses 2
## 5 Tim Football Wins 1
## 6 Tim Football Losses 4
## 7 Louise Swimming Wins 2
## 8 Louise Swimming Losses 2
## 9 Kelly Running Wins 5
## 10 Kelly Running Losses 1
spread(sports, key=Category, value=Counts)
## Students Sport Losses Wins
## 1 Ellie Rugby 2 3
## 2 Kelly Running 1 5
## 3 Louise Swimming 2 2
## 4 Matt Tennis 1 0
## 5 Tim Football 4 1

任务2:下面foods定义的数据框不整齐。弄清楚原因并用spread()它来整理它

foods<-data.frame(student=c("Antoinette","Antoinette","Taylor", "Taylor", "Alexa", "Alexa"), Category=c("Dinner", "Dessert", "Dinner", "Dessert", "Dinner","Dessert"), Frequency=c(3,1,4,5,2,1))

数据可能不整齐的另一种常见方式是列是值而不是变量。例如,下面的数据框显示了一些学生在5月和6月的测试中获得的百分比。数据是不整洁的,因为列MayJune是值,而不是变量。

percentages<-data.frame(student=c("Alejandro", "Pietro", "Jane"), "May"=c(90,12,45), "June"=c(80,30,100))

幸运的是,tidyverse包中还有一个函数来处理这个问题。gather()获取名称是值的列,keyvalueas为两个参数。这次key是变量的名称,其值为列名,而value是值的名称,其值分布在多个列上。即:

gather(percentages, "May", "June", key="Month", value = "Percentage")
## student Month Percentage
## 1 Alejandro May 90
## 2 Pietro May 12
## 3 Jane May 45
## 4 Alejandro June 80
## 5 Pietro June 30
## 6 Jane June 100

这些例子与单细胞RNA-seq分析没有多大关系,但旨在帮助说明整齐和不整齐数据的特征。如果您的数据以整齐的格式存储,您会发现分析单细胞RNA-seq数据要容易得多。幸运的是,我们通常用于促进单细胞RNA-seq分析的数据结构通常鼓励以整齐的方式存储您的数据。

5.6.2什么是Rich Data?

如果你谷歌“rich data”,你会发现这个术语有很多不同的定义。在本课程中,我们将使用“丰富数据”来表示通过组合来自多个来源的信息生成的数据。例如,您可以通过在R中创建一个对象来生成丰富的数据,该对象包含单细胞RNA-seq实验中细胞中基因表达值的矩阵,还有关于如何进行实验的信息。我们将在下面讨论的SingleCellExperiment类是丰富数据的一个示例。

5.7

Bioconductor , SingleCellExperiment and scater


5.7.1 Bioconductor

来自维基百科:Bioconductor是一个免费的,开源的开放式开发软件项目,用于分析和理解分子生物学中湿实验室实验产生的基因组数据。Bioconductor主要基于统计R编程语言,但确实包含其他编程语言的贡献。它每年有两个版本,遵循R的半年版本。在任何时候都有一个发布版本,对应于R的发布版本,以及一个对应于R的开发版本的开发版本。大多数用户将找到适合他们需求的发布版本。


我们强烈建议所有新手,甚至经验丰富的高通量数据分析师使用完善和维护的Bioconductor方法和类。


5.7.2 SingleCellExperiment

SingleCellExperiment(SCE)是用于存储来自单细胞实验的数据的S4类。这包括存储和检索spike-in信息的专门方法,每个细胞的降维坐标和尺寸因子,以及基因和文库的常用元数据。

实际上,可以使用其构造函数创建此类的对象:

library(SingleCellExperiment)
counts <- matrix(rpois(100, lambda = 10), ncol=10, nrow=10)
rownames(counts) <- paste("gene", 1:10, sep = "")
colnames(counts) <- paste("cell", 1:10, sep = "")
sce <- SingleCellExperiment(
assays = list(counts = counts),
rowData = data.frame(gene_names = paste("gene_name", 1:10, sep = "")),
colData = data.frame(cell_names = paste("cell_name", 1:10, sep = ""))
)
sce
## class: SingleCellExperiment
## dim: 10 10
## metadata(0):
## assays(1): counts
## rownames(10): gene1 gene2 ... gene9 gene10
## rowData names(1): gene_names
## colnames(10): cell1 cell2 ... cell9 cell10
## colData names(1): cell_names
## reducedDimNames(0):
## spikeNames(0):

SingleCellExperiment中,用户可以为测定条目指定任意名称。为了协助软件包之间的互操作性,作者提供了针对特定类型数据的名称的一些建议:

  • 计数:原始计数数据,例如特定基因的读数或转录物数。

  • normcounts:与原始计数相同的标准化值。例如,计数除以以单位为中心的特定于细胞的大小因子。

  • logcounts:日志转换计数或类似计数的值。在大多数情况下,这将被定义为对数转换的范数,例如,使用log base 2和伪计数1。

  • cpm:每百万计数。这是每个细胞中每个基因的读数,除以每个细胞的文库大小(以百万计)。

  • tpm:每百万的转录本。这是每个细胞中每个基因的转录物数量除以该细胞中转录物的总数(以百万计)。

  • 这些建议名称中的每一个都具有适当的getter / setter方法,以便于操作SingleCellExperiment。例如,我们可以使用(非常具体命名的)counts,对其进行标准化并将其分配给normcounts

normcounts(sce) <- log2(counts(sce) + 1)
sce
## class: SingleCellExperiment
## dim: 10 10
## metadata(0):
## assays(2): counts normcounts
## rownames(10): gene1 gene2 ... gene9 gene10
## rowData names(1): gene_names
## colnames(10): cell1 cell2 ... cell9 cell10
## colData names(1): cell_names
## reducedDimNames(0):
## spikeNames(0):
dim(normcounts(sce))
## [1] 10 10
head(normcounts(sce))
## cell1 cell2 cell3 cell4 cell5 cell6 cell7
## gene1 3.169925 3.169925 2.000000 2.584963 2.584963 3.321928 3.584963
## gene2 3.459432 1.584963 3.584963 3.807355 3.700440 3.700440 3.000000
## gene3 3.000000 3.169925 3.807355 3.169925 3.321928 3.321928 3.321928
## gene4 3.584963 3.459432 3.000000 3.807355 3.700440 3.700440 3.700440
## gene5 3.906891 3.000000 3.169925 3.321928 3.584963 3.459432 3.807355
## gene6 3.700440 3.700440 3.584963 4.000000 3.169925 3.000000 3.459432
## cell8 cell9 cell10
## gene1 3.321928 3.807355 2.807355
## gene2 3.807355 3.700440 4.000000
## gene3 2.584963 4.000000 3.700440
## gene4 3.169925 3.584963 3.700440
## gene5 3.807355 2.584963 3.584963
## gene6 3.321928 3.459432 4.000000

5.7.3 scater

scater是用于单细胞RNA-seq分析的R包(McCarthy等人,2017)。该软件包含几种有用的方法,用于在进一步下游分析之前对数据进行质量控制,可视化和预处理。

scater 具有以下功能:

  • 自动计算QC指标

  • 来自具有伪比对的read数据的转录物量化

  • 数据格式标准化

  • 丰富的探索性可视化分析

  • 无缝集成到Bioconductor宇宙中

  • 简单的规范化的方法我们强烈建议scater用于所有单细胞RNA-seq分析,并且scater是课程第一部分的基础。

如下图所示,scater将帮助您在比对后对表达式矩阵进行质量控制,过滤和规范化。请记住,此图表示scater使用SCESet类的原始版本。在最新版本中,这个数字仍然是正确的,除了SCESet可以用SingleCellExperiment类代替。



单细胞测序揭示皮肤伤口中成纤维细胞的异质性

首个阿尔茨海默症单细胞转录组分析

GEO数据库的这个功能你知道吗

单细胞转录组视频在B站更新到第二单元啦!

单细胞实战(三) Cell Ranger使用初探

你值得拥有的单细胞RNA测序分析工具TOP 3

单细胞实战(二) cell ranger使用前注意事项

单细胞转录组聚类后的细胞类群如何查找数据库来定义

单细胞实战(一)数据下载

爱恨难分—癌症免疫治疗获得性抗性



如果你对单细胞转录组研究感兴趣,但又不知道如何入门,也许你可以关注一下下面的课程

单细胞天地欢迎你

单细胞天地

生信技能树


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存